module.exports = {
    menuGoHome: menuGoHome,
    menuGoFight: menuGoFight,
    menuGoTask: menuGoTask,
    menuGoBase: menuGoBase,
    fightController: fightController,
}

//=============================================================
///////////////////////////////////////////////////////////////
//主菜单相关方法////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
//=============================================================
//前往主页
function menuGoHome(MENU) {
    click(MENU.POS.x, MENU.POS.y);
    sleep(0.5 * 1000);
    click(MENU.POS.HOME.x, MENU.POS.HOME.y);
    sleep(0.5 * 1000);
    //确认是否离开基建
    exitBase(MENU.CHECK);
    sleep(0.5 * 1000);
}
//前往战斗页面
function menuGoFight(MENU) {
    if (isHome(MENU.CHECK)) {
        click(1800, 280);
        sleep(0.5 * 1000);
    } else {
        click(MENU.POS.x, MENU.POS.y);
        sleep(0.5 * 1000);
        click(MENU.POS.FIGHT.x, MENU.POS.FIGHT.y);
        sleep(0.5 * 1000);
        //确认是否离开基建
        exitBase(MENU.CHECK);
        sleep(0.5 * 1000);
    }
}
//前往任务页面
function menuGoTask(MENU) {
    if (isHome(MENU.CHECK)) {
        click(1660, 860);
        sleep(0.5 * 1000);
    } else {
        click(MENU.POS.x, MENU.POS.y);
        sleep(0.5 * 1000);
        click(MENU.POS.TASK.x, MENU.POS.TASK.y);
        sleep(0.5 * 1000);
        //确认是否离开基建
        exitBase(MENU.CHECK);
        sleep(1 * 1000);
    }
}
//前往基建页面
function menuGoBase(MENU) {
    if (isHome(MENU.CHECK)) {
        click(1915, 950);
        sleep(0.5 * 1000);
    } else {
        click(MENU.POS.x, MENU.POS.y);
        sleep(0.5 * 1000);
        click(MENU.POS.BASE.x, MENU.POS.BASE.y)
        sleep(2.5 * 1000);
    }
}
//是否在主页
function isHome(CHECK) {
    return checkPoint(CHECK.HOME.x, CHECK.HOME.y, CHECK.HOME.color);
}

//确认离开基建
function exitBase(CHECK) {
    if (checkPoint(CHECK.BASE_EXIT.x, CHECK.BASE_EXIT.y, CHECK.BASE_EXIT.color)) {
        click(1920, 760);
        sleep(1 * 1000);
    }
}

//=============================================================
///////////////////////////////////////////////////////////////
//战斗相关方法//////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
//=============================================================
/**
 * 作战中央控制器
 * @param {Array} INIT_2D 
 * @param {Array} FIGHT2D 
 * @param {Enumerator} POS 
 * @param {Enumerator} CHECK 
 */
function fightController(INIT_2D, FIGHT2D, POS, CHECK) {

    //获取当前是星期几
    var week = new Date().getDay();
    let exist = false;
    for (i = 0; i < 10; i++) {
        //物资筹备
        if (i < 5) {
            for (res = 0; res < 5; res++) {
                if (INIT_2D[i][1] != 0) {
                    if (INIT_2D[i][0] == FIGHT2D.RES_TYPE_2D[week][res]) {
                        exist = true;
                        //点击物资筹备
                        click(POS.RES.x, POS.RES.y);
                        sleep(0.5 * 1000);
                        click(FIGHT2D.RES_2D[res][0], FIGHT2D.RES_2D[res][1]);
                        sleep(1 * 1000);
                        click(FIGHT2D.RES_LEVEL_2D[INIT_2D[i][2]][0], FIGHT2D.RES_LEVEL_2D[INIT_2D[i][2]][1]);
                        sleep((0.5 * 1000));
                        loopFightProcessor(INIT_2D[i][0], INIT_2D[i][1], CHECK, POS);
                    }
                }
            }
        }
        //芯片搜索 
        else if (i < 9) {
            for (chip = 0; chip < 4; chip++) {
                if (INIT_2D[i][1] != 0) {
                    if (INIT_2D[i][0] == FIGHT2D.CHIP_TYPE_2D[week][chip]) {
                        //点击芯片搜索
                        click(POS.CHIP.x, POS.CHIP.y);
                        sleep(0.5 * 1000);
                        click(FIGHT2D.CHIP_2D[chip][0], FIGHT2D.CHIP_2D[chip][1]);
                        sleep(0.5 * 1000);
                        sleep(1 * 1000);
                        click(FIGHT2D.CHIP_LEVEL_2D[INIT_2D[i][2]][0], FIGHT2D.CHIP_LEVEL_2D[INIT_2D[i][2]][1]);
                        sleep((0.5 * 1000));
                        loopFightProcessor(INIT_2D[i][0], INIT_2D[i][1], CHECK, POS);
                    }
                }
            }
        }
        //围剿作战 
        else if (i < 11) {
            if (i == 9 && INIT_2D[i][1] != 0) {
                //切尔诺伯格
                click(POS.SIEGE.x, POS.SIEGE.y);
                sleep(1 * 1000);
                click(POS.SIEGE_LEVEL_1.x, POS.SIEGE_LEVEL_1.y);
                sleep(1 * 1000);
                loopFightProcessor(INIT_2D[i][0], INIT_2D[i][1], CHECK, POS);
            }
            if (i == 10 && INIT_2D[i][1] != 0) {
                //龙门外环
                click(POS.SIEGE.x, POS.SIEGE.y);
                sleep(1 * 1000);
                click(POS.SIEGE_LEVEL_2.x, POS.SIEGE_LEVEL_2.y);
                sleep(1 * 1000);
                loopFightProcessor(INIT_2D[i][0], INIT_2D[i][1], CHECK, POS);
            }
        }
    }
}

/**
 * 
 * @param {Number} TIME 
 * @param {Enumerator} CHECK 
 */
function loopFightProcessor(NAME, TIME, CHECK, POS) {
    var i = 1;
    sleep(0.5 * 1000);
    if (!isProxy(CHECK)) {
        click(CHECK.PROXY.x, CHECK.PROXY.y);
    }
    sleep(0.5 * 1000);
    if (isProxy(CHECK)) {
        //开始行动
        click(POS.ACTION_START.x, POS.ACTION_START.y);
        sleep(1 * 1000);
        //检查是否有理智
        checkReason(CHECK,POS);
        //开始第一轮
        toast(NAME + ": 进行第 " + i + " 轮,总计 " + TIME + " 轮");
        sleep(2*1000);
        //开始行动2
        click(POS.ACTION_START2.x, POS.ACTION_START2.y);
        //开始循环
        sleep(30 * 1000);
        while (true) {
            //检查是否升级
            fightLevelUp(CHECK);
            //检查是否通关(模糊比较)
            if (isComplete(CHECK)) {
                i++;
                sleep(2 * 1000);
                click(POS.ACTION_START2.x, POS.ACTION_START2.y);
                sleep(3 * 1000);
                if (i > TIME) {
                    break;
                }
                //开始行动
                click(POS.ACTION_START.x, POS.ACTION_START.y);
                sleep(1*1000);
                //检查是否还有理智
                checkReason(CHECK,POS);
                toast(NAME + ": 接下来进行第 " + i + " 轮,总计 " + TIME + " 轮");
                sleep(2*1000);
                //开始行动2
                click(POS.ACTION_START2.x, POS.ACTION_START2.y);
                //每3秒检查一次
                sleep(3 * 1000);
            }
        }
    } else {
        toast("该关卡未通关,跳过...");
    }

}
/**
 * 检查是否开启代理
 * @param {Enumerator} CHECK 
 */
function isProxy(CHECK) {
    return checkPoint(CHECK.PROXY.x, CHECK.PROXY.y, CHECK.PROXY.color);
}
/**
 * 检查是否完成
 * @param {Enumerator} CHECK 
 */
function isComplete(CHECK) {
    return checkPoint(CHECK.COMPLETE.x, CHECK.COMPLETE.y, CHECK.COMPLETE.color);
}
/**
 * 检查是否还有理智
 * @param {Enumerator} CHECK 
 */
function checkReason(CHECK, POS) {
    if (checkPoint(CHECK.REASON.x, CHECK.REASON.y, CHECK.REASON.color)) {
        if (CHECK.REASON.continue) {
            sleep(0.5 * 1000);
            click(POS.ADD_REASON.x, POS.ADD_REASON.y);
            sleep(1 * 1000);
            click(POS.ACTION_START.x, POS.ACTION_START.y);
        }
    }
}

/**
 * 处理升级页面
 * @param {Enumerator} CHECK 
 */
function fightLevelUp(CHECK) {
    if (checkPoint(CHECK.LEVELUP.x, CHECK.LEVELUP.y, CHECK.LEVELUP.color)) {
        sleep(1 * 1000);
        click(CHECK.LEVELUP.x, CHECK.LEVELUP.y);
        sleep(1 * 1000);
    }
}

//=============================================================
///////////////////////////////////////////////////////////////
//任务相关方法//////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
//=============================================================



//=============================================================
///////////////////////////////////////////////////////////////
//基建相关方法//////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
//=============================================================


//=============================================================
///////////////////////////////////////////////////////////////
//通用方法//////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
//=============================================================

function checkPoint(x, y, color) {
    // 查色
    return $images.detectsColor(captureScreen(), color, x, y);
}